const Koa = require("koa");
const bodyParser = require("koa-bodyparser");
const KoaRouter = require("@koa/router");
const multer = require("@koa/multer");

const app = new Koa();

// 使用第三方中间件解析body数据
app.use(bodyParser()); // 使用第三方中间件解析form数据
const formParser = multer();

// 创建路由对象
const userRouter = new KoaRouter({ prefix: "/users" });

/**
 * 1.get: params方式, 例子:/:id
 * 2.get: query方式, 例子: ?name=query-name&age=18
 * 3.post: json方式, 例子: { "name": "json-name", "age": 18 }
 * 4.post: x-www-form-urlencoded
 * 5.post: form-data
 */
// 1. get/params方式
userRouter.get("/:id", (ctx, next) => {
  const id = ctx.params.id;
  ctx.body = `get params: ${id}`;
});

// 2. get/query方式
userRouter.get("/", (ctx, next) => {
  const { name, age } = ctx.query;
  ctx.body = `get query: ${name} ${age}`;
});

// 3. post/json方式(使用更多)
userRouter.post("/json", (ctx, next) => {
  // 注意事项: 不能从ctx.body中获取数据
  console.log(ctx.request.body, ctx.req.body);

  // ctx.body 用于向客户端返回数据
  ctx.body = "post json";
});

// 4. post/x-www-form-urlencoded方式
userRouter.post("/urlencoded", (ctx, next) => {
  console.log(ctx.request.body);

  ctx.body = "post x-www-form-urlencoded";
});

app.use(userRouter.routes());
app.use(userRouter.allowedMethods());

// 5. post/form-data方式
userRouter.post("/formdata", formParser.any(), (ctx, next) => {
  console.log(ctx.request.body);
  ctx.body = "post form-data";
});

app.listen(6000, () => {
  console.log("koa server is running on http://localhost:6000");
});
